package org.groupg.practice;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ChineseTokenizerExample {
    public static void main(String[] args) {
        // 使用 IK Analyzer

        // 要分词的文本

        try (Analyzer analyzer = new IKAnalyzer()) {
            String text = "承兑人客户名,承兑人核心客户号,科目代码,三级科目贷方余额,三级科目借方余额,科目名称,三级科目轧差金额,账务机构编码,账务机构名称,账务机构编号,应计利息,应计利息科目号,计提准备金,账簿类型,资产余额,资产编号,资产类型,平均风险权重%,资产余额占比%,所属条线,票号,票据类型,债券代码,业务明细汇总金额,业务条线,业务类型,回购期限,回购类型,计算实例号,CCF 信用转化系数,CCF 表外项目转化系数,信用转换系数CCF,币种代码,币种,手续费,手续费科目号,城市,客户种类,客户名称,客户号,客户编号,客户类型,期末资产余额合计,交易对手证件号码,交易对手证件类型,交易对手大类,交易对手名称,交易对手子类,人民币汇率,押品价值币种代码,缓释到期日,缓释合同编号,缓释起始日,缓释品评估认定价值,缓释工具到期日期,缓释品名称,缓释品编号,缓释工具起始日期,押品重估价值,缓释品类型编码,缓释品类型,二级缓释品类型编码,三级缓释品类型编码,四级缓释品类型编码,五级缓释品类型编码,缓释品类型名称,二级缓释品类型名称,三级缓释品类型名称,四级缓释品类型名称,五级缓释品类型名称,承诺类型,合同金额,借款合同编号,合同编号,核心客户号,国家代码,缓释覆盖部分的RWA,风险缓释,缓释一级分类,风险缓释占比%,本期余额,本期余额/转换前资产,循环标识,数据日期,数据来源,数据来源表,债项余额汇总,债项描述,债项编号,核对差异,核对差异率%,贴现类型,缓释前风险暴露（EAD）,缓释前风险暴露,风险暴露占比%,减值准备,减值科目号,减值准备占比%,生效日,期末本期余额合计,期末减值准备,期末风险暴露（表外）,期末减值准备（表外）,期末风险暴露（表内）,期末减值准备（表内）,期末风险暴露合计,企业规模代码,到期日,公允价值变动科目号,公允价值变动,风险暴露,财务机构编号,是否第一顺位权,五级分类,五级分类代码,一般专项标志,评级（如有）,发放金额,所属集团统一核心客户号,担保金额,保证人交易对手名称,保证人交易对手名称,保证人交易对手编号,行业门类,行业代码,行业投向门类,行业投向大类,行业投向中类,行业投向子类,行业名称,利息调整,利息调整科目号,投资类型,是否用于风险暴露分类,是否我行承兑,是否用于合格缓释认定,总分核对是否超过容忍度,开证日,发行（承兑）人名称,发行（承兑人）所属国家或地区,开证行名称,开证行行号,信用证有效期,总账科目余额,一级会计科目编码,二级会计科目编码,三级会计科目编码,三级会计科目名称,总账科目号,表外项目代码,表外项目名称,债项风险权重,经营机构,经营机构编号,缓释分类,缓释权重,月均资产余额,月均风险暴露,名称,资产余额（表外）,转换前资产,表外业务缓释前风险暴露（EAD）,表外项目类别,期末风险加权资产（表外）,轧差后核对差异,资产余额（表内）,表内业务缓释前风险暴露（EAD）,期末风险加权资产（表内）,原始期限,逾期天数,质押买断类型,质押券证券代码,本金科目号,产品大类,产品名称,产品编号,产品细类,省份,合格信用风险缓释工具类型,不动产类别,房地产开发项目类型,不动产细类,应收利息,应收利息科目号,借据号,最近会计年度营业收入,注册国家或地区代码,关联债项编号,备注,准备金科目号,剩余期限,风险资产,风险缓释合同编号,风险缓释合同号,风险暴露类别,风险暴露分类,风险暴露类型,风险暴露分类代码,一级风险暴露分类代码,二级风险暴露分类代码,三级风险暴露分类代码,四级风险暴露分类代码,风险暴露分类认定代码,风险暴露分类层级,风险暴露分类名称,一级风险暴露分类名称,二级风险暴露分类名称,三级风险暴露分类名称,四级风险暴露分类名称,风险暴露分类认定名称,风险权重（%/100）,风险权重,规则编号,RWA,风险加权资产,风险加权资产占比%,证券代码,证券名称,证券种类,证券类型,序号,主权评级（如有）,缓释覆盖部分的风险暴露汇总,期末风险加权资产合计,年月,本期余额占比%,本期余额（表外）,本期余额（表内）,贸易类型代码,未缓释的风险暴露,未缓释RWA,缓释后平均风险权重（%）,基础缓释权重,合格交易者标志,核心市场参与者标识,缓释覆盖部分的风险暴露,跨境货物贸易标志,国内/国际证标签,投资级企业/投资级其他金融机构,豁免后缓释权重,拆借存放标识,是否豁免缓释权重底线,是否为住房开发贷款,是否符合审慎要求的房地产开发风险暴露,是否合格信用风险缓释工具,是否属于重组资产,融资性/非融资性标签,符合标准未使用额度标签,月均风险加权资产,月均本期余额,表内外标识,一般专项标签,合格信用风险缓释工具类型编号,合格信用风险缓释工具类型名称,是否满足审慎贷款审批标准标志,债务重组标识,风险暴露分类认定结果,标准信用评级结果,质押券票面金额,";
            // 分词
            TokenStream tokenStream = analyzer.tokenStream("field", text);
            tokenStream.reset();

            // 获取分词结果
            CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);

            List<String> attrList = new ArrayList<>();
            while (tokenStream.incrementToken()) {
                String term = charTermAttribute.toString();
                if (!attrList.contains(term)) {
                    attrList.add(term);
                    System.out.println(term);
                }

            }

            tokenStream.end();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 关闭分析器
    }
}